package cn.design.realize;

import java.util.ArrayList;
import java.util.List;

/**
 * @author dlq
 * @description 这个是文件夹类 ： private List<File> files; 中的File 可以为 文件，也可以是文件夹
 * @date 2020/9/17 10:43
 * @since 1.0
 */
public class FolderFile extends File {
    /**
     * File ： 可以是文件，可以是文件夹
     * files： 包含  FolderFile， ImageFile 、SqlFile、TextFile
     * 变相的认为：  List<File>  = List<FolderFile>  + List<ImageFile> + list<SqlFile> + List<TextFile>组合的
     * 假如我的文件有一个一层文件的话，文件类型是文件夹的话 private FolderFile folderFile, 详情见 {@link OtherFolderFile}
     */
    private List<File> files;

    public FolderFile(String name) {
        super(name);
        files = new ArrayList<>();
    }

    /**
     * @param
     * @return void
     * @description 添加文件
     * @author dlq
     * @date 2020/9/17 10:46
     */
    public void addFile(File file) {
        files.add(file);
    }

    /**
     * @param file
     * @return void
     * @description 删除文件
     * @author dlq
     * @date 2020/9/17 10:46
     */
    public void removeFile(File file) {
        if (files != null && files.size() > 0){
            if (files.contains(file)){
                files.remove(file);
            }
        }
    }

    /**
     * @param
     * @return
     * @description 遍历文件,
     * @author dlq
     * @date 2020/9/17 10:47
     */
    public void foreach() {
        for (File file : files) {
            file.display();
            if (file instanceof  FolderFile){
                //如果是文件类型是文件夹的话，遍历该文件夹
                ((FolderFile) file).foreach();
            }

        }
    }

    @Override
    public void display() {
        System.out.println("我是一个 " + super.getName() + " 文件夹 ");

    }
}
